0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxWeightedTrs
↳5 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳6 CpxTypedWeightedTrs
↳7 CompletionProof (UPPER BOUND(ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳10 CpxTypedWeightedCompleteTrs
↳11 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳12 CpxRNTS
↳13 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 1098 ms)
↳18 CpxRNTS
↳19 IntTrsBoundProof (UPPER BOUND(ID), 287 ms)
↳20 CpxRNTS
↳21 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 218 ms)
↳24 CpxRNTS
↳25 IntTrsBoundProof (UPPER BOUND(ID), 7 ms)
↳26 CpxRNTS
↳27 FinalProof (⇔, 0 ms)
↳28 BOUNDS(1, n^1)
-(0, y) → 0
-(x, 0) → x
-(x, s(y)) → if(greater(x, s(y)), s(-(x, p(s(y)))), 0)
p(0) → 0
p(s(x)) → x
-(0, y) → 0 [1]
-(x, 0) → x [1]
-(x, s(y)) → if(greater(x, s(y)), s(-(x, p(s(y)))), 0) [1]
p(0) → 0 [1]
p(s(x)) → x [1]
- => minus |
minus(0, y) → 0 [1]
minus(x, 0) → x [1]
minus(x, s(y)) → if(greater(x, s(y)), s(minus(x, p(s(y)))), 0) [1]
p(0) → 0 [1]
p(s(x)) → x [1]
minus(0, y) → 0 [1]
minus(x, 0) → x [1]
minus(x, s(y)) → if(greater(x, s(y)), s(minus(x, p(s(y)))), 0) [1]
p(0) → 0 [1]
p(s(x)) → x [1]
minus :: 0:s:if → 0:s:if → 0:s:if 0 :: 0:s:if s :: 0:s:if → 0:s:if if :: greater → 0:s:if → 0:s:if → 0:s:if greater :: 0:s:if → 0:s:if → greater p :: 0:s:if → 0:s:if |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
minus
p
p(v0) → 0 [0]
const
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
const => 0
minus(z, z') -{ 1 }→ x :|: x >= 0, z = x, z' = 0
minus(z, z') -{ 1 }→ 0 :|: y >= 0, z = 0, z' = y
minus(z, z') -{ 2 }→ 1 + (1 + x + (1 + y)) + (1 + minus(x, y)) + 0 :|: z' = 1 + y, x >= 0, y >= 0, z = x
minus(z, z') -{ 1 }→ 1 + (1 + x + (1 + y)) + (1 + minus(x, 0)) + 0 :|: z' = 1 + y, x >= 0, y >= 0, z = x
p(z) -{ 1 }→ x :|: x >= 0, z = 1 + x
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, 0)) + 0 :|: z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, z' - 1)) + 0 :|: z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
{ minus } { p } |
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, 0)) + 0 :|: z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, z' - 1)) + 0 :|: z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, 0)) + 0 :|: z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, z' - 1)) + 0 :|: z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
minus: runtime: ?, size: O(n2) [z + z·z' + 3·z' + z'2] |
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, 0)) + 0 :|: z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + minus(z, z' - 1)) + 0 :|: z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
minus: runtime: O(n1) [1 + 2·z'], size: O(n2) [z + z·z' + 3·z' + z'2] |
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 + 2·z' }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + s) + 0 :|: s >= 0, s <= 3 * (z' - 1) + 1 * (z * (z' - 1)) + 1 * ((z' - 1) * (z' - 1)) + 1 * z, z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + s') + 0 :|: s' >= 0, s' <= 3 * 0 + 1 * (z * 0) + 1 * (0 * 0) + 1 * z, z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
minus: runtime: O(n1) [1 + 2·z'], size: O(n2) [z + z·z' + 3·z' + z'2] |
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 + 2·z' }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + s) + 0 :|: s >= 0, s <= 3 * (z' - 1) + 1 * (z * (z' - 1)) + 1 * ((z' - 1) * (z' - 1)) + 1 * z, z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + s') + 0 :|: s' >= 0, s' <= 3 * 0 + 1 * (z * 0) + 1 * (0 * 0) + 1 * z, z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
minus: runtime: O(n1) [1 + 2·z'], size: O(n2) [z + z·z' + 3·z' + z'2] p: runtime: ?, size: O(n1) [z] |
minus(z, z') -{ 1 }→ z :|: z >= 0, z' = 0
minus(z, z') -{ 1 }→ 0 :|: z' >= 0, z = 0
minus(z, z') -{ 1 + 2·z' }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + s) + 0 :|: s >= 0, s <= 3 * (z' - 1) + 1 * (z * (z' - 1)) + 1 * ((z' - 1) * (z' - 1)) + 1 * z, z >= 0, z' - 1 >= 0
minus(z, z') -{ 2 }→ 1 + (1 + z + (1 + (z' - 1))) + (1 + s') + 0 :|: s' >= 0, s' <= 3 * 0 + 1 * (z * 0) + 1 * (0 * 0) + 1 * z, z >= 0, z' - 1 >= 0
p(z) -{ 1 }→ 0 :|: z = 0
p(z) -{ 0 }→ 0 :|: z >= 0
p(z) -{ 1 }→ z - 1 :|: z - 1 >= 0
minus: runtime: O(n1) [1 + 2·z'], size: O(n2) [z + z·z' + 3·z' + z'2] p: runtime: O(1) [1], size: O(n1) [z] |